Análise do Jogo de Imagens aplicadas no Ensino médio

Roteiro de análise:

  1. Amostra dos dados da pesquisa realizada
  2. Determinar normalidade
  3. Determinar
  4. Histograma

Amostra dos dados da pesquisa realizada

Tabulação do número de acertos dos itens do jogo de imagens.

Coluna Descrição
Exoticas Número de acertos dentre todas as imagens exibidas do tipo exótica, valor experado é 5.
Nativas Número de acertos dentre todas as imagens exibidas do tipo nativa, valor experado é 5.

Determinado a taxa de percepção

Entende-se por taxa de percepção o fator determinado pela quantidade média de acertos dentre as questões apresentadas aos alunos, em relação a turma em que o questionario foi aplicado.

Teste de normalidade

Para determinar a normalidade nas distribuiçoes das respostas do jogo de imagens.

Identificação médio das turmas (nomes das espécies & origens)

Indice de reconhecimento médio das turmas

Q-Q Test

Teste de variância

Para determinar a variância

Algoritmo Comparação Variável p_valor variancia
F test to compare two variances Nativas x Exóticas Indice de reconhecimento 0.279 TRUE
Identificação do nome das espécies 0.6553 TRUE
Identificação da origem 0.0343 FALSE

Analises descritivas

Indice de identificação por Origem

Indice de identificação por Espécie

Testes de hipoteses

Esperado p-valor >= 0.05 na normalidade (espera-se H0) Esperado p-valor <= 0.05 no teste de hipotese (espera-se H1)

1. Os alunos itendificam mais os nomes dos animais de espécies exóticas que os animais de espécies nativas.

TEST T-student
H0 = Tident(exoticas) = Tident(nativas)
H1 = Tident(exoticas) > Tident(nativas)

Algoritmo Comparação Variável p_valor H0 H1 Confiança
Two Sample t-test Exóticas x Nativas Indice de reconhecimento 0.00829379088264213 FALSE TRUE 3.25% ~ 20.26%
Identificação do nome das espécies 2.77135680934484e-09 FALSE TRUE 27.69% ~ 46.21%
Identificação da origem 3.74320861066021e-12 FALSE TRUE -33% ~ -22.49%

Obs.:
Intervalo de confiança 95%

2. Os alunos identificam mais espécies de origem exótica que as de origem nativa.

TEST T-student
H0 = Tident(origem.exoticas) = Tident(origem.nativas)
H1 = Tident(origem.exoticas) > Tident(origem.nativas)

t.test(pos_gabarito$proporcoes$por_turma$p_origem_nativas, 
       pos_gabarito$proporcoes$por_turma$p_origem_exoticas, 
       alternative = "two.sided", paired = F, var.equal = T)

    Two Sample t-test

data:  pos_gabarito$proporcoes$por_turma$p_origem_nativas and pos_gabarito$proporcoes$por_turma$p_origem_exoticas
t = 10.751, df = 32, p-value = 3.743e-12
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
 0.2248657 0.3299903
sample estimates:
mean of x mean of y 
0.8005233 0.5230953 

3. Os alunos identificam mais as espécies exóticas (nome dos animais e origem) que espécies nativas.

ANOVA

# t.test(jogo.dados.em.p$p_nativas, jogo.dados.em.p$p_origem_nativas, 
#        alternative = "two.sided", paired = F, var.equal = T)
# t.anova <- aov(g2$proporcao ~ g2$especie + g2$tipo)
# summary(t.anova)

4. Os alunos reconhecem mais mamíferos do que os demais grupos taxonómicos.

ANOVA

5. Estudantes que residem na Cidade 1 (com UC) identificam mais espécies nativas do que estudantes que residem na Cidade 2 (sem UC).

t.test(nat$silvania, nat$belavista,
       alternative = "two.sided", paired = F, var.equal = T)

    Two Sample t-test

data:  nat$silvania and nat$belavista
t = -0.70051, df = 32, p-value = 0.4887
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
 -0.13259671  0.06473419
sample estimates:
mean of x mean of y 
0.3509933 0.3849245 

6. Estudantes que residem em área rural tem maior conhecimento sobre as espécies nativas.

8. Frequencia de contato natureza

comparacao diff lwr upr p adj significancia
Raramente-Nunca 0.3707 -0.0960 0.8374 0.1816 FALSE
Ás vezes-Nunca 0.3259 -0.1381 0.7898 0.2906 FALSE
Frequentemente-Nunca 0.3325 -0.1315 0.7964 0.2716 FALSE
Sempre-Nunca 0.3343 -0.1297 0.7982 0.2665 FALSE
Ás vezes-Raramente -0.0448 -0.2075 0.1179 0.9371 FALSE
Frequentemente-Raramente -0.0382 -0.2010 0.1245 0.9639 FALSE
Sempre-Raramente -0.0365 -0.1992 0.1263 0.9697 FALSE
Frequentemente-Ás vezes 0.0066 -0.1481 0.1612 1.0000 FALSE
Sempre-Ás vezes 0.0084 -0.1463 0.1630 0.9999 FALSE
Sempre-Frequentemente 0.0018 -0.1529 0.1564 1.0000 FALSE

9. Fez aulas praticas

comparacao diff lwr upr p adj significancia
Sim, fazenda-Não fez -0.1000 -0.3867 0.1868 0.9364 FALSE
Sim, FLONA-Não fez 0.0446 -0.1971 0.2863 0.9976 FALSE
Sim, memorial do cerrado-Não fez 0.0481 -0.2050 0.3012 0.9972 FALSE
Sim, outro-Não fez 0.0467 -0.2210 0.3143 0.9983 FALSE
Sim, parque ou trilha-Não fez -0.0155 -0.2088 0.1779 1.0000 FALSE
Sim, zoologico-Não fez 0.0675 -0.1742 0.3092 0.9781 FALSE
Sim, FLONA-Sim, fazenda 0.1446 -0.1768 0.4659 0.8144 FALSE
Sim, memorial do cerrado-Sim, fazenda 0.1481 -0.1820 0.4781 0.8164 FALSE
Sim, outro-Sim, fazenda 0.1467 -0.1946 0.4880 0.8446 FALSE
Sim, parque ou trilha-Sim, fazenda 0.0845 -0.2023 0.3713 0.9715 FALSE
Sim, zoologico-Sim, fazenda 0.1675 -0.1538 0.4888 0.6895 FALSE
Sim, memorial do cerrado-Sim, FLONA 0.0035 -0.2882 0.2952 1.0000 FALSE
Sim, outro-Sim, FLONA 0.0021 -0.3023 0.3065 1.0000 FALSE
Sim, parque ou trilha-Sim, FLONA -0.0601 -0.3017 0.1816 0.9880 FALSE
Sim, zoologico-Sim, FLONA 0.0229 -0.2589 0.3047 1.0000 FALSE
Sim, outro-Sim, memorial do cerrado -0.0014 -0.3150 0.3122 1.0000 FALSE
Sim, parque ou trilha-Sim, memorial do cerrado -0.0636 -0.3167 0.1896 0.9874 FALSE
Sim, zoologico-Sim, memorial do cerrado 0.0194 -0.2723 0.3112 1.0000 FALSE
Sim, parque ou trilha-Sim, outro -0.0622 -0.3298 0.2055 0.9916 FALSE
Sim, zoologico-Sim, outro 0.0208 -0.2836 0.3252 1.0000 FALSE
Sim, zoologico-Sim, parque ou trilha 0.0830 -0.1587 0.3247 0.9406 FALSE

10. Estudantes da Cidade 1 (com UC) tem maior número de acertos de espécies nativas.

comparacao diff lwr upr p adj significancia
Sim-Não 0.0571 -0.1168 0.2311 0.4962 FALSE

Ranking dos animais

LS0tCnRpdGxlOiAiTWVzdHJhZG8gQmlvbG9naWEiCmF1dGhvcjogIkhlcnNvbiBNZWxvIgpkYXRlOiAiMjgvMDYvMjAxOCIKb3V0cHV0OiAKICBodG1sX25vdGVib29rCi0tLQoKYGBge3IsIGVjaG89RkFMU0UsIHdhcm5pbmc9RkFMU0UsIGVycm9yPUZBTFNFLCBpbmNsdWRlID0gRkFMU0V9CmxpYnJhcnkobHVicmlkYXRlKQpsaWJyYXJ5KGRwbHlyKQpsaWJyYXJ5KHRpZHlyKQpsaWJyYXJ5KHN0cmluZ3IpCmxpYnJhcnkocmVzaGFwZTIpCmxpYnJhcnkoZ2dwbG90MikKbGlicmFyeShnZ3B1YnIpCmxpYnJhcnkoZ3JpZCkKbGlicmFyeShncmlkRXh0cmEpCmxpYnJhcnkoa25pdHIpCmxpYnJhcnkoa2FibGVFeHRyYSkKbGlicmFyeShub3J0ZXN0KQpsaWJyYXJ5KHN0YXRzKQpsaWJyYXJ5KG11bHRjb21wVmlldykKCnN1cHByZXNzV2FybmluZ3MoU3lzLnNldGxvY2FsZSgiTENfQUxMIiwgJ2VuX1VTLlVURi04JykpCm9wdGlvbnMoc2NpcGVuID0gOTk5LCBkaWdpdHMgPSA0KQojIG9wdGlvbnMoInNjaXBlbiI9LTEwMCwgImRpZ2l0cyI9NikKIyBnZXR3ZCgpCmxvYWQoImRhZG9zLlJEYXRhIikKYGBgCgojIyBBbsOhbGlzZSBkbyBKb2dvIGRlIEltYWdlbnMgYXBsaWNhZGFzIG5vIEVuc2lubyBtw6lkaW8KClJvdGVpcm8gZGUgYW7DoWxpc2U6CgoxLiBBbW9zdHJhIGRvcyBkYWRvcyBkYSBwZXNxdWlzYSByZWFsaXphZGEKMi4gRGV0ZXJtaW5hciBub3JtYWxpZGFkZQozLiBEZXRlcm1pbmFyIAo0LiBIaXN0b2dyYW1hCgojIyMgQW1vc3RyYSBkb3MgZGFkb3MgZGEgcGVzcXVpc2EgcmVhbGl6YWRhCgpUYWJ1bGHDp8OjbyBkbyBuw7ptZXJvIGRlIGFjZXJ0b3MgZG9zIGl0ZW5zIGRvIGpvZ28gZGUgaW1hZ2Vucy4KCmBgYHtyLCBlY2hvPUZBTFNFfQpkZXNjX2NvbHVuYXMgPC0gZGF0YS5mcmFtZSgKICAgICJDb2x1bmEiID0gYygiRXhvdGljYXMiLCAiTmF0aXZhcyIpLAogICAgIkRlc2NyacOnw6NvIiA9IGMoIk7Dum1lcm8gZGUgYWNlcnRvcyBkZW50cmUgdG9kYXMgYXMgaW1hZ2VucyBleGliaWRhcyBkbyB0aXBvIGV4w7N0aWNhLCB2YWxvciBleHBlcmFkbyDDqSA1LiIsCiAgICAgICAgICAgICAgICAgICAgIk7Dum1lcm8gZGUgYWNlcnRvcyBkZW50cmUgdG9kYXMgYXMgaW1hZ2VucyBleGliaWRhcyBkbyB0aXBvIG5hdGl2YSwgdmFsb3IgZXhwZXJhZG8gw6kgNS4iKQogICAgKQpkZXNjX2NvbHVuYXMgJT4lCiAga2FibGUoKSAlPiUKICBrYWJsZV9zdHlsaW5nKGMoInN0cmlwZWQiLCAiYm9yZGVyZWQiKSwgZnVsbF93aWR0aCA9IFRSVUUpICU+JQogIGNvbHVtbl9zcGVjKDEsIGJvbGQgPSBUUlVFKQoKYGBgCgoKYGBge3J9CmhlYWQocG9zX2dhYmFyaXRvJGRhZG9zLCAxMCkKYGBgCgojIyMjIERldGVybWluYWRvIGEgdGF4YSBkZSBwZXJjZXDDp8OjbwoKRW50ZW5kZS1zZSBwb3IgdGF4YSBkZSBwZXJjZXDDp8OjbyBvIGZhdG9yIGRldGVybWluYWRvIHBlbGEgcXVhbnRpZGFkZSBtw6lkaWEgZGUgYWNlcnRvcyBkZW50cmUgYXMgcXVlc3TDtWVzIGFwcmVzZW50YWRhcyBhb3MgYWx1bm9zLCBlbSByZWxhw6fDo28gYSB0dXJtYSBlbSBxdWUgbyBxdWVzdGlvbmFyaW8gZm9pIGFwbGljYWRvLgoKYGBge3J9CnByaW50KHBvc19nYWJhcml0byRwcm9wb3Jjb2VzJHBvcl90dXJtYSkKYGBgCgojIyMgVGVzdGUgZGUgbm9ybWFsaWRhZGUKClBhcmEgZGV0ZXJtaW5hciBhIG5vcm1hbGlkYWRlIG5hcyBkaXN0cmlidWnDp29lcyBkYXMgcmVzcG9zdGFzIGRvIGpvZ28gZGUgaW1hZ2Vucy4KCmBgYHtyLCBlY2hvPUZBTFNFfQpub3JtYWxpZGFkZSA8LSBmdW5jdGlvbih4KSB7CiAgICB0MSA8LSBzaGFwaXJvLnRlc3QoeCkKICAgIHQyIDwtIHNmLnRlc3QoeCkKICAgIHQzIDwtIGxpbGxpZS50ZXN0KHgpCiAgICB0NCA8LSBhZC50ZXN0KHgpCiAgICB0NSA8LSBjdm0udGVzdCh4KQogICAgcmV0dXJuKCBkYXRhLmZyYW1lKAogICAgICAgIEFsZ29yaXRtbyA9IGModDEkbWV0aG9kLCB0MiRtZXRob2QsIAogICAgICAgICAgICAgICAgICAgdDMkbWV0aG9kLCB0NCRtZXRob2QsIAogICAgICAgICAgICAgICAgICAgdDUkbWV0aG9kKSwKICAgICAgICBwLnZhbG9yID0gYyh0MSRwLnZhbHVlLCB0MiRwLnZhbHVlLCAKICAgICAgICAgICAgICAgICAgICB0MyRwLnZhbHVlLCB0NCRwLnZhbHVlLCAKICAgICAgICAgICAgICAgICAgICB0NSRwLnZhbHVlKSwKICAgICAgICBOb3JtYWxpZGFkZSA9IGModDEkcC52YWx1ZSA+IC4wNSwgdDIkcC52YWx1ZSA+IC4wNSwgCiAgICAgICAgICAgICAgICAgICAgICB0MyRwLnZhbHVlID4gLjA1LCB0NCRwLnZhbHVlID4gLjA1LCAKICAgICAgICAgICAgICAgICAgICAgIHQ1JHAudmFsdWUgPiAuMDUpCiAgICApKQp9CgpncmFmaWNvX2RlbnNpZGFkZSA8LSBmdW5jdGlvbih2YXJpYXZlbCwgY29yLCB0aXR1bG8pIHsKICAgIHBsb3QgPC0gCiAgICAgICAgcG9zX2dhYmFyaXRvJHByb3BvcmNvZXMkcG9yX3R1cm1hICU+JSAKICAgICAgICBnZ2RlbnNpdHkoeCA9IHZhcmlhdmVsLCBmaWxsID0gY29yLAogICAgICAgICAgbWFpbiA9IHRpdHVsbywKICAgICAgICAgIHhsYWIgPSAiUGVyY2VudHVhbCBkZSBhY2VydG9zIikgKyAKICAgICAgICB4bGltKDAsIDEpICsgCiAgICAgICAgeWxpbSgwLCA4KQogICAgbm9tYWxpZGFkZSA8LSAKICAgICAgICBnZ3RleHR0YWJsZSgKICAgICAgICAgICAgbm9ybWFsaWRhZGUocG9zX2dhYmFyaXRvJHByb3BvcmNvZXMkcG9yX3R1cm1hW1t2YXJpYXZlbF1dKSwgCiAgICAgICAgICAgIHJvd3MgPSBOVUxMLCB0aGVtZSA9IHR0aGVtZShiYXNlX3N0eWxlID0gIm1PcmFuZ2UiLCBiYXNlX3NpemUgPSA4KQogICAgICAgICkKICAgIAogICAgcmVzdWx0YWRvIDwtIGxpc3QoCiAgICAgICAgcGxvdCA9IHBsb3QsCiAgICAgICAgbm9ybWFsaWRhZGUgPSBub21hbGlkYWRlCiAgICApCiAgICByZXR1cm4ocmVzdWx0YWRvKQp9Cgp0MSA8LSBncmFmaWNvX2RlbnNpZGFkZSgicF9uYXRpdmFzIiwgImdyZWVuIiwgIklkZW50aWZpY2HDp8OjbyBkbyBub21lIGRhcyBlc3DDqWNpZXMgZGUgb3JpZ2VtIE5hdGl2YXMiKQp0MiA8LSBncmFmaWNvX2RlbnNpZGFkZSgicF9leG90aWNhcyIsICJyZWQiLCAiSWRlbnRpZmljYcOnw6NvIGRvIG5vbWUgZGFzIGVzcMOpY2llcyBkZSBvcmlnZW0gRXjDs3RpY2FzIikKdDMgPC0gZ3JhZmljb19kZW5zaWRhZGUoInBfb3JpZ2VtX25hdGl2YXMiLCAiZGFya2dyZWVuIiwgIklkZW50aWZpY2HDp8OjbyBkZSBvcmlnZW0gTmF0aXZhcyIpCnQ0IDwtIGdyYWZpY29fZGVuc2lkYWRlKCJwX29yaWdlbV9leG90aWNhcyIsICJkYXJrcmVkIiwgIklkZW50aWZpY2HDp8OjbyBkZSBvcmlnZW0gRXjDs3RpY2FzIikKdDUgPC0gZ3JhZmljb19kZW5zaWRhZGUoInBfaW5kaWNlX25hdGl2YXMiLCAib3JhbmdlIiwgIkluZGljZSBkZSByZWNvbmhlY2ltZW50byBOYXRpdmFzIChvcmlnZW5zICsgZXNww6ljaWVzKSIpCnQ2IDwtIGdyYWZpY29fZGVuc2lkYWRlKCJwX2luZGljZV9leG90aWNhcyIsICJvcmFuZ2VyZWQiLCAiSW5kaWNlIGRlIHJlY29uaGVjaW1lbnRvIEV4w7N0aWNhcyAob3JpZ2VucyArIGVzcMOpY2llcykiKQpgYGAKCiMjIyMgSWRlbnRpZmljYcOnw6NvIG3DqWRpbyBkYXMgdHVybWFzIChub21lcyBkYXMgZXNww6ljaWVzICYgb3JpZ2VucykKCmBgYHtyIGZpZy53aWR0aD04LCBmaWcuaGVpZ2h0PTV9CmdyaWQuYXJyYW5nZSh0MSRwbG90LCB0MiRwbG90LAogICAgICAgICAgICAgdDEkbm9ybWFsaWRhZGUsIHQyJG5vcm1hbGlkYWRlLAogICAgICAgICAgICAgdDMkcGxvdCwgdDQkcGxvdCwKICAgICAgICAgICAgIHQzJG5vcm1hbGlkYWRlLCB0NCRub3JtYWxpZGFkZSwKICAgICAgICAgICAgIG5jb2wgPSAyLAogICAgICAgICAgICAgaGVpZ2h0cyA9IGMoMywyLDMsMiksCiAgICAgICAgICAgICB0b3AgPSB0ZXh0R3JvYigiRGVuc2lkYWRlIGRlIGlkZW50aWZpY2HDp8OjbyBtw6lkaWEgZGFzIHR1cm1hcyBlbnRyZSBcbmVzcGVjaWVzIGUgc3VhcyBvcmlnZW5zXG4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3AgPSBncGFyKGZvbnRzaXplID0gMjAsIGZvbnQgPSAyKSkKICAgICAgICAgICAgICkKYGBgCgojIyMjIEluZGljZSBkZSByZWNvbmhlY2ltZW50byBtw6lkaW8gZGFzIHR1cm1hcwoKYGBge3IgZmlnLndpZHRoPTgsIGZpZy5oZWlnaHQ9M30KZ3JpZC5hcnJhbmdlKHQ1JHBsb3QsIHQ2JHBsb3QsCiAgICAgICAgICAgICB0NSRub3JtYWxpZGFkZSwgdDYkbm9ybWFsaWRhZGUsCiAgICAgICAgICAgICBuY29sID0gMiwKICAgICAgICAgICAgIGhlaWdodHMgPSBjKDQsMyksCiAgICAgICAgICAgICB0b3AgPSB0ZXh0R3JvYigiRGVuc2lkYWRlIGRvcyBpbmRpY2VzIGRlIHJlY29uaGVjaW1lbnRvIG3DqWRpbyBkYXMgdHVybWFzXG4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3AgPSBncGFyKGZvbnRzaXplID0gMjAsIGZvbnQgPSAyKSkKICAgICAgICAgICAgICkKYGBgCgoKIyMjIFEtUSBUZXN0CgpgYGB7ciwgZmlnLndpZHRoPTYsIGZpZy5oZWlnaHQ9NH0KcXFwbG90LmRhdGEgPC0gZnVuY3Rpb24gKHZlYywgdGl0dWxvKSB7CiAgIyBmb2xsb3dpbmcgZm91ciBsaW5lcyBmcm9tIGJhc2UgUidzIHFxbGluZSgpCiAgeSA8LSBxdWFudGlsZSh2ZWNbIWlzLm5hKHZlYyldLCBjKDAuMjUsIDAuNzUpKQogIHggPC0gcW5vcm0oYygwLjI1LCAwLjc1KSkKICBzbG9wZSA8LSBkaWZmKHkpL2RpZmYoeCkKICBpbnQgPC0geVsxTF0gLSBzbG9wZSAqIHhbMUxdCgogIGQgPC0gZGF0YS5mcmFtZShyZXNpZHMgPSB2ZWMpCgogIGdncGxvdChkLCBhZXMoc2FtcGxlID0gcmVzaWRzKSkgKyAKICAgICAgc3RhdF9xcSgpICsgCiAgICAgIGdlb21fYWJsaW5lKHNsb3BlID0gc2xvcGUsIGludGVyY2VwdCA9IGludCwgY29sID0gInJlZCIpICsKICAgICAgeGxpbSgtMiwgMikgKwogICAgICB5bGltKDAsIDEpICsKICAgICAgdGhlbWVfYncoKSArCiAgICAgIGxhYnMoCiAgICAgICAgdGl0bGUgPSB0aXR1bG8KICAgICkKfQoKcTEgPC0gcXFwbG90LmRhdGEocG9zX2dhYmFyaXRvJHByb3BvcmNvZXMkcG9yX3R1cm1hJHBfbmF0aXZhcywgIklkZW50aWZpY2HDp8OjbyBkbyBub21lIGRhcyBlc3DDqWNpZXMgZGUgb3JpZ2VtIE5hdGl2YXMiKQpxMiA8LSBxcXBsb3QuZGF0YShwb3NfZ2FiYXJpdG8kcHJvcG9yY29lcyRwb3JfdHVybWEkcF9leG90aWNhcywgIklkZW50aWZpY2HDp8OjbyBkbyBub21lIGRhcyBlc3DDqWNpZXMgZGUgb3JpZ2VtIEV4b3RpY2FzIikKcTMgPC0gcXFwbG90LmRhdGEocG9zX2dhYmFyaXRvJHByb3BvcmNvZXMkcG9yX3R1cm1hJHBfb3JpZ2VtX25hdGl2YXMsICJJZGVudGlmaWNhw6fDo28gZGUgb3JpZ2VtIE5hdGl2YXMiKQpxNCA8LSBxcXBsb3QuZGF0YShwb3NfZ2FiYXJpdG8kcHJvcG9yY29lcyRwb3JfdHVybWEkcF9vcmlnZW1fZXhvdGljYXMsICJJZGVudGlmaWNhw6fDo28gZGUgb3JpZ2VtIEV4b3RpY2FzIikKcTUgPC0gcXFwbG90LmRhdGEocG9zX2dhYmFyaXRvJHByb3BvcmNvZXMkcG9yX3R1cm1hJHBfaW5kaWNlX25hdGl2YXMsICJJbmRpY2UgZGUgcmVjb25oZWNpbWVudG8gTmF0aXZhcyAob3JpZ2VucyArIGVzcMOpY2llcykiKQpxNiA8LSBxcXBsb3QuZGF0YShwb3NfZ2FiYXJpdG8kcHJvcG9yY29lcyRwb3JfdHVybWEkcF9pbmRpY2VfZXhvdGljYXMsICJJbmRpY2UgZGUgcmVjb25oZWNpbWVudG8gRXhvdGljYXMgKG9yaWdlbnMgKyBlc3DDqWNpZXMpIikKCmdyaWQuYXJyYW5nZShxMSwgcTIsIAogICAgICAgICAgICAgcTMsIHE0LAogICAgICAgICAgICAgcTUsIHE2LAogICAgICAgICAgICAgbmNvbCA9IDIsCiAgICAgICAgICAgICB0b3AgPSB0ZXh0R3JvYigiTm9ybWFsIFEtUSBQbG90XG4iLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdwID0gZ3Bhcihmb250c2l6ZSA9IDIwLCBmb250ID0gMikpCiAgICAgICAgICAgICApCmBgYAoKIyMjIFRlc3RlIGRlIHZhcmnDom5jaWEKClBhcmEgZGV0ZXJtaW5hciBhIHZhcmnDom5jaWEKCmBgYHtyfQp2YXJpYW5jaWEgPC0gZGF0YS5mcmFtZSgKICAgIEFsZ29yaXRtbyA9IGMoIkYgdGVzdCB0byBjb21wYXJlIHR3byB2YXJpYW5jZXMiKSwKICAgICJDb21wYXJhw6fDo28iID0gYygiTmF0aXZhcyB4IEV4w7N0aWNhcyIpLAogICAgIlZhcmnDoXZlbCIgPSBjKAogICAgICAgICJJbmRpY2UgZGUgcmVjb25oZWNpbWVudG8iLAogICAgICAgICJJZGVudGlmaWNhw6fDo28gZG8gbm9tZSBkYXMgZXNww6ljaWVzIiwKICAgICAgICAiSWRlbnRpZmljYcOnw6NvIGRhIG9yaWdlbSIKICAgICksCiAgICAicF92YWxvciIgPSBjKAogICAgICAgIHZhci50ZXN0KHBvc19nYWJhcml0byRwcm9wb3Jjb2VzJHBvcl90dXJtYSRwX2luZGljZV9uYXRpdmFzLCAKICAgICAgICAgICAgICAgICBwb3NfZ2FiYXJpdG8kcHJvcG9yY29lcyRwb3JfdHVybWEkcF9pbmRpY2VfZXhvdGljYXMsIAogICAgICAgICAgICAgICAgIGFsdGVybmF0aXZlID0gInR3by5zaWRlZCIpJHAudmFsdWUsCiAgICAgICAgdmFyLnRlc3QocG9zX2dhYmFyaXRvJHByb3BvcmNvZXMkcG9yX3R1cm1hJHBfbmF0aXZhcywgCiAgICAgICAgICAgICAgICAgcG9zX2dhYmFyaXRvJHByb3BvcmNvZXMkcG9yX3R1cm1hJHBfZXhvdGljYXMsIAogICAgICAgICAgICAgICAgIGFsdGVybmF0aXZlID0gInR3by5zaWRlZCIpJHAudmFsdWUsCiAgICAgICAgdmFyLnRlc3QocG9zX2dhYmFyaXRvJHByb3BvcmNvZXMkcG9yX3R1cm1hJHBfb3JpZ2VtX25hdGl2YXMsIAogICAgICAgICAgICAgICAgIHBvc19nYWJhcml0byRwcm9wb3Jjb2VzJHBvcl90dXJtYSRwX29yaWdlbV9leG90aWNhcywgCiAgICAgICAgICAgICAgICAgYWx0ZXJuYXRpdmUgPSAidHdvLnNpZGVkIikkcC52YWx1ZQogICAgKQopCgp2YXJpYW5jaWEgPC0gdmFyaWFuY2lhICU+JQogICAgbXV0YXRlKAogICAgICAgIHZhcmlhbmNpYSA9IHBfdmFsb3IgPiAwLjA1LAogICAgICAgIHBfdmFsb3IgPSBjZWxsX3NwZWMocm91bmQocF92YWxvciwgNCksIGJvbGQgPSBULCBjb2xvciA9ICJibGFjayIsIGFsaWduID0gInJpZ2h0IiksCiAgICAgICAgdmFyaWFuY2lhID0gY2VsbF9zcGVjKHZhcmlhbmNpYSwgYm9sZCA9IHZhcmlhbmNpYSwKICAgICAgICAgICAgICAgICAgICAgICBjb2xvcj0gaWZlbHNlKHZhcmlhbmNpYSwgIndoaXRlIiwgImJsYWNrIiksIAogICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQgPSBpZmVsc2UodmFyaWFuY2lhLCAiZ3JlZW4iLCAiI0NDQ0NDQyIpKQogICAgKQoKdmFyaWFuY2lhICU+JQogIGthYmxlKGVzY2FwZSA9IEYpICU+JQogIGthYmxlX3N0eWxpbmcoYygic3RyaXBlZCIsICJib3JkZXJlZCIpLCBmdWxsX3dpZHRoID0gVFJVRSkgJT4lCiAgY29sdW1uX3NwZWMoMSwgYm9sZCA9IFRSVUUpICU+JQogIGNvbGxhcHNlX3Jvd3MoY29sdW1ucyA9IDE6MiwgdmFsaWduID0gInRvcCIpIApgYGAKCiMjIyBBbmFsaXNlcyBkZXNjcml0aXZhcwoKYGBge3J9CmhlYWQocG9zX2dhYmFyaXRvJGVzcGVjaWVzLCAxMCkKYGBgCgojIyMjIEluZGljZSBkZSBpZGVudGlmaWNhw6fDo28gcG9yIE9yaWdlbQoKYGBge3IsIGZpZy53aWR0aD04LCBmaWcuaGVpZ2h0PTR9CnBvc19nYWJhcml0byRlc3BlY2llICU+JSAKICAgIGdncGxvdChhZXMoZXNwZWNpZURlc2MsIGZyLCBmaWxsID0gZ3J1cG8pKSArIAogICAgZ2VvbV9iYXIoc3RhdD0iaWRlbnRpdHkiKSArCiAgICBnZW9tX3RleHQoYWVzKGxhYmVsID0gcGFzdGUwKHJvdW5kKGZyICogMTAwLCAxKSwgIiUiKSksIAogICAgICAgICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2UoMC45KSwgdmp1c3QgPSAwLjUsCiAgICAgICAgICAgICAgaGp1c3QgPSAtMC41KSArCiAgICBzY2FsZV95X2NvbnRpbnVvdXMobGltaXRzID0gYygwLDEuMiksIGxhYmVscyA9IHNjYWxlczo6cGVyY2VudCkgKwogICAgZmFjZXRfd3JhcCh+b3JpZ2VtLCBzY2FsZXMgPSAiZnJlZV95IikgKwogICAgY29vcmRfZmxpcCgpICsKICAgIHRoZW1lX2J3KCkgKwogICAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA5MCwgaGp1c3QgPSAxKSwKICAgICAgICAgIGxlZ2VuZC5wb3NpdGlvbiA9ICJ0b3AiKSArCiAgICBsYWJzKHRpdGxlID0gIkluZGljZSBkZSBJZGVudGlmaWNhw6fDo28gcG9yIE9yaWdlbSIsCiAgICAgICAgIGZpbGwgPSAiR3J1cG9zIiwgeCA9ICIiLCB5ID0gIlxuRnJlcXVlbmNpYSByZWxhdGl2YSIpCgpgYGAKCiMjIyMgSW5kaWNlIGRlIGlkZW50aWZpY2HDp8OjbyBwb3IgRXNww6ljaWUKCmBgYHtyLCBmaWcud2lkdGg9OCwgZmlnLmhlaWdodD00fQpwb3NfZ2FiYXJpdG8kZXNwZWNpZSAlPiUgCiAgICBnZ3Bsb3QoYWVzKGVzcGVjaWVEZXNjLCBmciwgZmlsbCA9IG9yaWdlbSkpICsgCiAgICBnZW9tX2JhcihzdGF0PSJpZGVudGl0eSIpICsKICAgIGdlb21fdGV4dChhZXMobGFiZWwgPSBwYXN0ZTAocm91bmQoZnIgKiAxMDAsIDEpLCAiJSIpKSwgCiAgICAgICAgICAgICAgcG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSgwLjkpLCB2anVzdCA9IDAuNSwKICAgICAgICAgICAgICBoanVzdCA9IC0wLjMpICsKICAgIHNjYWxlX3lfY29udGludW91cyhsaW1pdHMgPSBjKDAsMS4yKSwgbGFiZWxzID0gc2NhbGVzOjpwZXJjZW50KSArCiAgICBmYWNldF93cmFwKH5ncnVwbywgc2NhbGVzID0gImZyZWVfeSIpICsKICAgIGNvb3JkX2ZsaXAoKSArCiAgICB0aGVtZV9idygpICsKICAgIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gOTAsIGhqdXN0ID0gMSksCiAgICAgICAgICBsZWdlbmQucG9zaXRpb24gPSAidG9wIikgKwogICAgbGFicyh0aXRsZSA9ICJJbmRpY2UgZGUgSWRlbnRpZmljYcOnw6NvIHBvciBFc3DDqWNpZSIsCiAgICAgICAgIGZpbGwgPSAiT3JpZ2VtIiwgeCA9ICIiLCB5ID0gIlxuRnJlcXVlbmNpYSByZWxhdGl2YSIpCmBgYAoKCiMjIyBUZXN0ZXMgZGUgaGlwb3Rlc2VzCgpFc3BlcmFkbyBwLXZhbG9yID49IDAuMDUgbmEgbm9ybWFsaWRhZGUgKGVzcGVyYS1zZSBIMCkKRXNwZXJhZG8gcC12YWxvciA8PSAwLjA1IG5vIHRlc3RlIGRlIGhpcG90ZXNlIChlc3BlcmEtc2UgSDEpCgojIyMjIDEuIE9zIGFsdW5vcyBpdGVuZGlmaWNhbSBtYWlzIG9zIG5vbWVzIGRvcyBhbmltYWlzIGRlIGVzcMOpY2llcyBleMOzdGljYXMgcXVlIG9zIGFuaW1haXMgZGUgZXNww6ljaWVzIG5hdGl2YXMuCgoqKlRFU1QgVC1zdHVkZW50KiogIApIMCA9IFRpZGVudChleG90aWNhcykgPSBUaWRlbnQobmF0aXZhcykgIApIMSA9IFRpZGVudChleG90aWNhcykgPiBUaWRlbnQobmF0aXZhcykKCmBgYHtyLCBmaWcud2lkdGg9OCwgZmlnLmhlaWdodD0zfQp0bXAgPC0gcG9zX2dhYmFyaXRvJHByb3BvcmNvZXMkcG9yX3R1cm1hICU+JQogIHNlbGVjdCh0dXJtYXMsIHBfbm9tZV9leG90aWNhcyA9IHBfZXhvdGljYXMsIHBfbm9tZV9uYXRpdmFzID0gcF9uYXRpdmFzLCBwX29yaWdlbV9leG90aWNhczpwX2luZGljZV9uYXRpdmFzKSAlPiUKICBtZWx0KGlkID0gInR1cm1hcyIpCgpjYmluZCh0bXAsIGNvbHNwbGl0KHRtcCR2YXJpYWJsZSwgIl8iLCBjKCJwIiwgImluZGljYWRvciIsICJvcmlnZW0iKSkpICU+JQogIHNlbGVjdCh0dXJtYXMsIGluZGljYWRvciwgb3JpZ2VtLCB2YWx1ZSkgJT4lCiAgZ2dwbG90KCkgKyAKICBnZW9tX2JveHBsb3QoYWVzKHggPSBvcmlnZW0sIHkgPSB2YWx1ZSwgZmlsbCA9IG9yaWdlbSksIHNob3cubGVnZW5kID0gRikgKyAKICBzY2FsZV95X2NvbnRpbnVvdXMobGltaXRzID0gYygwLDEpLCBsYWJlbHMgPSBzY2FsZXM6OnBlcmNlbnQpICsKICBmYWNldF93cmFwKH5pbmRpY2Fkb3IpICsKICB0aGVtZV9idygpICsKICBsYWJzKHRpdGxlID0gIkJveHBsb3QgZGUgaWRlbnRpZmljYcOnw6NvIGRvcyBjcml0w6lyaW9zIGVzdGFiZWxlY2lkb3MiLAogICAgICAgeSA9ICJQZXJjZW50dWFsIGRlIGlkZW50aWZpY2HDp8OjbyIsIHggPSAiIikKYGBgCgpgYGB7cn0KdDEgPC0gdC50ZXN0KAogICAgICAgcG9zX2dhYmFyaXRvJHByb3BvcmNvZXMkcG9yX3R1cm1hJHBfaW5kaWNlX2V4b3RpY2FzLCAKICAgICAgIHBvc19nYWJhcml0byRwcm9wb3Jjb2VzJHBvcl90dXJtYSRwX2luZGljZV9uYXRpdmFzLCAKICAgICAgIGFsdGVybmF0aXZlID0gInR3by5zaWRlZCIsIHBhaXJlZCA9IEYsIHZhci5lcXVhbCA9IFQpCnQyIDwtIHQudGVzdCgKICAgICAgIHBvc19nYWJhcml0byRwcm9wb3Jjb2VzJHBvcl90dXJtYSRwX2V4b3RpY2FzLCAKICAgICAgIHBvc19nYWJhcml0byRwcm9wb3Jjb2VzJHBvcl90dXJtYSRwX25hdGl2YXMsIAogICAgICAgYWx0ZXJuYXRpdmUgPSAidHdvLnNpZGVkIiwgcGFpcmVkID0gRiwgdmFyLmVxdWFsID0gVCkKdDMgPC0gdC50ZXN0KAogICAgICAgcG9zX2dhYmFyaXRvJHByb3BvcmNvZXMkcG9yX3R1cm1hJHBfb3JpZ2VtX2V4b3RpY2FzLCAKICAgICAgIHBvc19nYWJhcml0byRwcm9wb3Jjb2VzJHBvcl90dXJtYSRwX29yaWdlbV9uYXRpdmFzLCAKICAgICAgIGFsdGVybmF0aXZlID0gInR3by5zaWRlZCIsIHBhaXJlZCA9IEYsIHZhci5lcXVhbCA9IFQpCgpkYXRhLmZyYW1lKAogICAgQWxnb3JpdG1vID0gYyh0MSRtZXRob2QsIHQyJG1ldGhvZCwgdDMkbWV0aG9kKSwKICAgICJDb21wYXJhw6fDo28iID0gYygiRXjDs3RpY2FzIHggTmF0aXZhcyIpLAogICAgIlZhcmnDoXZlbCIgPSBjKAogICAgICAgICJJbmRpY2UgZGUgcmVjb25oZWNpbWVudG8iLAogICAgICAgICJJZGVudGlmaWNhw6fDo28gZG8gbm9tZSBkYXMgZXNww6ljaWVzIiwKICAgICAgICAiSWRlbnRpZmljYcOnw6NvIGRhIG9yaWdlbSIKICAgICksCiAgICBwX3ZhbG9yID0gYyh0MSRwLnZhbHVlLCB0MiRwLnZhbHVlLCB0MyRwLnZhbHVlKSwKICAgIEgwID0gYyh0MSRwLnZhbHVlID49IDAuMDUsIHQyJHAudmFsdWUgPj0gMC4wNSwgdDMkcC52YWx1ZSA+PSAwLjA1KSwKICAgIEgxID0gYyh0MSRwLnZhbHVlIDwgMC4wNSwgdDIkcC52YWx1ZSA8IDAuMDUsIHQzJHAudmFsdWUgPCAwLjA1KSwKICAgICJDb25maWFuw6dhIiA9IGMoCiAgICAgICAgcGFzdGUocGFzdGUwKHJvdW5kKHQxJGNvbmYuaW50ICogMTAwLCAyKSwgIiUiKSwgY29sbGFwc2UgPSAiIH4gIiksCiAgICAgICAgcGFzdGUocGFzdGUwKHJvdW5kKHQyJGNvbmYuaW50ICogMTAwLCAyKSwgIiUiKSwgY29sbGFwc2UgPSAiIH4gIiksCiAgICAgICAgcGFzdGUocGFzdGUwKHJvdW5kKHQzJGNvbmYuaW50ICogMTAwLCAyKSwgIiUiKSwgY29sbGFwc2UgPSAiIH4gIikKICAgICkKKSAlPiUKICBtdXRhdGUoCiAgICBwX3ZhbG9yID0gY2VsbF9zcGVjKHBfdmFsb3IsIGJvbGQgPSBULCBjb2xvciA9ICJibGFjayIsIGFsaWduID0gInJpZ2h0IiksCiAgICBIMCA9IGNlbGxfc3BlYyhIMCwgYm9sZCA9IEgwLAogICAgICAgICAgICAgICAgICAgY29sb3I9IGlmZWxzZShIMCwgIndoaXRlIiwgImJsYWNrIiksIAogICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZCA9IGlmZWxzZShIMCwgImdyZWVuIiwgIiNDQ0NDQ0MiKSksCiAgICBIMSA9IGNlbGxfc3BlYyhIMSwgYm9sZCA9IEgxLCAKICAgICAgICAgICAgICAgICAgIGNvbG9yID0gaWZlbHNlKEgxLCAid2hpdGUiLCAiYmxhY2siKSwgCiAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kID0gaWZlbHNlKEgxLCAiZ3JlZW4iLCAiI0NDQ0NDQyIpKQogICkgJT4lCiAga2FibGUoZXNjYXBlID0gRikgJT4lCiAga2FibGVfc3R5bGluZyhjKCJzdHJpcGVkIiwgImJvcmRlcmVkIiksIGZ1bGxfd2lkdGggPSBUUlVFKSAlPiUKICBjb2x1bW5fc3BlYygxLCBib2xkID0gVFJVRSkgJT4lCiMgIGNvbHVtbl9zcGVjKDQsIGJvbGQgPSBULCBjb2xvciA9ICJkYXJrYmx1ZSIpICU+JQogIGNvbGxhcHNlX3Jvd3MoY29sdW1ucyA9IDE6MiwgdmFsaWduID0gInRvcCIpICU+JQogIGZvb3Rub3RlKGdlbmVyYWwgPSAiSW50ZXJ2YWxvIGRlIGNvbmZpYW7Dp2EgOTUlIiwKICAgICAgICAgICBnZW5lcmFsX3RpdGxlID0gIlxuT2JzLjogIiwKICAgICAgICAgICBmb290bm90ZV9hc19jaHVuayA9IFQpCmBgYAoKCiMjIyMgMi4gT3MgYWx1bm9zIGlkZW50aWZpY2FtIG1haXMgZXNww6ljaWVzIGRlIG9yaWdlbSBleMOzdGljYSBxdWUgYXMgZGUgb3JpZ2VtIG5hdGl2YS4KCioqVEVTVCBULXN0dWRlbnQqKiAgCkgwID0gVGlkZW50KG9yaWdlbS5leG90aWNhcykgPSBUaWRlbnQob3JpZ2VtLm5hdGl2YXMpICAKSDEgPSBUaWRlbnQob3JpZ2VtLmV4b3RpY2FzKSA+IFRpZGVudChvcmlnZW0ubmF0aXZhcykKCmBgYHtyfQp0LnRlc3QocG9zX2dhYmFyaXRvJHByb3BvcmNvZXMkcG9yX3R1cm1hJHBfb3JpZ2VtX25hdGl2YXMsIAogICAgICAgcG9zX2dhYmFyaXRvJHByb3BvcmNvZXMkcG9yX3R1cm1hJHBfb3JpZ2VtX2V4b3RpY2FzLCAKICAgICAgIGFsdGVybmF0aXZlID0gInR3by5zaWRlZCIsIHBhaXJlZCA9IEYsIHZhci5lcXVhbCA9IFQpCmBgYAoKIyMjIyAzLiBPcyBhbHVub3MgaWRlbnRpZmljYW0gbWFpcyBhcyBlc3DDqWNpZXMgZXjDs3RpY2FzIChub21lIGRvcyBhbmltYWlzIGUgb3JpZ2VtKSBxdWUgZXNww6ljaWVzIG5hdGl2YXMuCgoqKkFOT1ZBKiogIAoKYGBge3J9CiMgdC50ZXN0KGpvZ28uZGFkb3MuZW0ucCRwX25hdGl2YXMsIGpvZ28uZGFkb3MuZW0ucCRwX29yaWdlbV9uYXRpdmFzLCAKIyAgICAgICAgYWx0ZXJuYXRpdmUgPSAidHdvLnNpZGVkIiwgcGFpcmVkID0gRiwgdmFyLmVxdWFsID0gVCkKIyB0LmFub3ZhIDwtIGFvdihnMiRwcm9wb3JjYW8gfiBnMiRlc3BlY2llICsgZzIkdGlwbykKIyBzdW1tYXJ5KHQuYW5vdmEpCmBgYAoKIyMjIyA0LiBPcyBhbHVub3MgcmVjb25oZWNlbSBtYWlzIG1hbcOtZmVyb3MgZG8gcXVlIG9zIGRlbWFpcyBncnVwb3MgdGF4b27Ds21pY29zLgoKKipBTk9WQSoqICAKCgpgYGB7ciwgZmlnLndpZHRoPTgsIGZpZy5oZWlnaHQ9NX0KZGFkb3NBTk9WQSA8LSAKICAgIHBvc19nYWJhcml0byR0YXhvbm9taWNvcyAlPiUKICAgIHNlbGVjdCh0dXJtYXMsIGdydXBvcyA9IGdydXBvLCB2YWxvcikKI2Fub3ZhIDwtIGFvdihkYXRhID0gcG9zX2dhYmFyaXRvJHRheG9ub21pY29zLCB2YWxvciB+IGdydXBvICsgb3JpZ2VtKQphbm92YSA8LSBhb3YoZGF0YSA9IGRhZG9zQU5PVkEsIHZhbG9yIH4gZ3J1cG9zKQpzdW1tYXJ5KGFub3ZhKQp0dWtleSA8LSBUdWtleUhTRChhbm92YSkKdHVrZXkKI3Bsb3QodHVrZXksIGxhcyA9IDEsIGNvbCA9ICJicm93biIpCgp0a3kgPSBhcy5kYXRhLmZyYW1lKHR1a2V5JGdydXBvcykKdGt5JHBhaXIgPSByb3duYW1lcyh0a3kpCmdncGxvdCh0a3ksIGFlcyhjb2xvdXIgPSBjdXQoYHAgYWRqYCwgYygwLCAwLjAxLCAwLjA1LCAxKSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsID0gYygicDwwLjAxIiwicDwwLjA1IiwiTsOjbyBzaWduaWZpY2F0aXZvIikpKSkgKwogICAgZ2VvbV9obGluZSh5aW50ZXJjZXB0PTAsIGx0eT0iMTEiLCBjb2xvdXI9ImdyZXkzMCIpICsKICAgIGdlb21fZXJyb3JiYXIoYWVzKHBhaXIsIHltaW49bHdyLCB5bWF4PXVwciksIHdpZHRoPTAuMikgKwogICAgZ2VvbV9wb2ludChhZXMocGFpciwgZGlmZikpICsKICAgIGNvb3JkX2ZsaXAoKSArCiAgICB0aGVtZV9idygpICsKICAgIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gOTAsIGhqdXN0ID0gMSksCiAgICAgICAgICBsZWdlbmQucG9zaXRpb24gPSAidG9wIikgKwogICAgbGFicyh0aXRsZSA9ICJUdWtleSIsCiAgICAgICAgIGNvbG91ciA9ICIiLCB4ID0gIkNvbXBhcmHDp8OjbyIsIHkgPSAiRGlmZXJlbsOnYSIpCiAgICAKYGBgCgpgYGB7ciwgZmlnLndpZHRoPTgsIGZpZy5oZWlnaHQ9OH0KZGFkb3NBTk9WQSA8LSAKICAgIHBvc19nYWJhcml0byR0YXhvbm9taWNvcyAlPiUKICAgIG11dGF0ZShncnVwb3MgPSBwYXN0ZShncnVwbywgIkAiLCBvcmlnZW0pKSAlPiUKICAgIHNlbGVjdCh0dXJtYXMsIGdydXBvcywgdmFsb3IpCiNhbm92YSA8LSBhb3YoZGF0YSA9IHBvc19nYWJhcml0byR0YXhvbm9taWNvcywgdmFsb3IgfiBncnVwbyArIG9yaWdlbSkKYW5vdmEgPC0gYW92KGRhdGEgPSBkYWRvc0FOT1ZBLCB2YWxvciB+IGdydXBvcykKc3VtbWFyeShhbm92YSkKdHVrZXkgPC0gVHVrZXlIU0QoYW5vdmEpCnR1a2V5CiNwbG90KHR1a2V5LCBsYXMgPSAxLCBjb2wgPSAiYnJvd24iKQoKdGt5ID0gYXMuZGF0YS5mcmFtZSh0dWtleSRncnVwb3MpCnRreSRwYWlyID0gcm93bmFtZXModGt5KQpnZ3Bsb3QodGt5LCBhZXMoY29sb3VyID0gY3V0KGBwIGFkamAsIGMoMCwgMC4wMSwgMC4wNSwgMSksIAogICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbCA9IGMoInA8MC4wMSIsInA8MC4wNSIsIk5vbi1TaWciKSkpKSArCiAgICBnZW9tX2hsaW5lKHlpbnRlcmNlcHQ9MCwgbHR5PSIxMSIsIGNvbG91cj0iZ3JleTMwIikgKwogICAgZ2VvbV9lcnJvcmJhcihhZXMocGFpciwgeW1pbj1sd3IsIHltYXg9dXByKSwgd2lkdGg9MC4yKSArCiAgICBnZW9tX3BvaW50KGFlcyhwYWlyLCBkaWZmKSkgKwogICAgY29vcmRfZmxpcCgpICsKICAgIHRoZW1lX2J3KCkgKwogICAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA5MCwgaGp1c3QgPSAxKSwKICAgICAgICAgIGxlZ2VuZC5wb3NpdGlvbiA9ICJ0b3AiKSArCiAgICBsYWJzKHRpdGxlID0gIlR1a2V5IiwKICAgICAgICAgY29sb3VyID0gIiIsIHggPSAiQ29tcGFyYcOnw6NvIiwgeSA9ICJEaWZlcmVuw6dhIikKICAgIApgYGAKCiMjIyMgNS4gRXN0dWRhbnRlcyBxdWUgcmVzaWRlbSBuYSBDaWRhZGUgMSAoY29tIFVDKSBpZGVudGlmaWNhbSBtYWlzIGVzcMOpY2llcyBuYXRpdmFzIGRvIHF1ZSBlc3R1ZGFudGVzIHF1ZSByZXNpZGVtIG5hIENpZGFkZSAyIChzZW0gVUMpLgoKYGBge3J9CnByb3BvcmNvZXNQb3JNdW5pY2lwaW8gPC0KICAgIG1lcmdlKAogICAgICAgIHBvc19nYWJhcml0byRkYWRvcyAlPiUgCiAgICAgICAgICAgIHNlbGVjdCh0dXJtYXMsIG11bmljaXBpbykgJT4lIAogICAgICAgICAgICB1bmlxdWUoKSwKICAgICAgICBwb3NfZ2FiYXJpdG8kcHJvcG9yY29lcyRwb3JfdHVybWFfc2V4bwogICAgKSAlPiUKICAgIHRibF9kZigpCgpuYXQgPC0gTlVMTApuYXQkc2lsdmFuaWEgPC0gCiAgICBuYS5vbWl0KHNwcmVhZChwcm9wb3Jjb2VzUG9yTXVuaWNpcGlvLCBrZXkgPSBtdW5pY2lwaW8sIHZhbHVlID0gcF9uYXRpdmFzKVssIlNpbHbDom5pYSJdKSAlPiUgYXMudmVjdG9yKCkKbmF0JGJlbGF2aXN0YSA8LSAKICAgIG5hLm9taXQoc3ByZWFkKHByb3BvcmNvZXNQb3JNdW5pY2lwaW8sIGtleSA9IG11bmljaXBpbywgdmFsdWUgPSBwX25hdGl2YXMpWywiQmVsYSBWaXN0YSBkZSBHb2nDoXMiXSkgJT4lIGFzLnZlY3RvcigpCgpib3hwbG90KG5hdCRzaWx2YW5pYSwgbmF0JGJlbGF2aXN0YSkKI3Zhci50ZXN0KG5hdF9zaWx2YW5pYSwgbmF0X2JlbGF2aXN0YSwgYWx0ZXJuYXRpdmUgPSAidHdvLnNpZGVkIikKCnQudGVzdChuYXQkc2lsdmFuaWEsIG5hdCRiZWxhdmlzdGEsCiAgICAgICBhbHRlcm5hdGl2ZSA9ICJ0d28uc2lkZWQiLCBwYWlyZWQgPSBGLCB2YXIuZXF1YWwgPSBUKQpgYGAKCiMjIyMgNi4gRXN0dWRhbnRlcyBxdWUgcmVzaWRlbSBlbSDDoXJlYSBydXJhbCB0ZW0gbWFpb3IgY29uaGVjaW1lbnRvIHNvYnJlIGFzIGVzcMOpY2llcyBuYXRpdmFzLgoKYGBge3IsIGZpZy53aWR0aD04LCBmaWcuaGVpZ2h0PTN9CnRtcCA8LSAKICAgIHBvc19nYWJhcml0byRwcm9wb3Jjb2VzJHBvcl90dXJtYV9hcmVhICU+JQogICAgc2VsZWN0KG11bmljaXBpbywgYXJlYSwgcF9ub21lX25hdGl2YXMgPSBwX25hdGl2YXMsIHBfb3JpZ2VtX25hdGl2YXMsIHBfaW5kaWNlX25hdGl2YXMpICU+JQogICAgYXJyYW5nZShhcmVhKSAlPiUKICAgIG1lbHQoaWQgPSBjKCJtdW5pY2lwaW8iLCAiYXJlYSIpKQoKdG1wIDwtCiAgICBjYmluZCh0bXAsIGNvbHNwbGl0KHRtcCR2YXJpYWJsZSwgIl8iLCBjKCJwIiwgImluZGljYWRvciIsICJvcmlnZW0iKSkpICU+JQogICAgc2VsZWN0KG11bmljaXBpbywgYXJlYSwgaW5kaWNhZG9yLCBvcmlnZW0sIHZhbHVlKQoKdG1wICU+JQogIGdncGxvdCgpICsgCiAgZ2VvbV9ib3hwbG90KGFlcyh4ID0gYXJlYSwgeSA9IHZhbHVlLCBmaWxsID0gbXVuaWNpcGlvKSwgc2hvdy5sZWdlbmQgPSBUKSArIAogIHNjYWxlX3lfY29udGludW91cyhsaW1pdHMgPSBjKDAsMSksIGxhYmVscyA9IHNjYWxlczo6cGVyY2VudCkgKwogIGZhY2V0X3dyYXAofmluZGljYWRvcikgKwogIHRoZW1lX2J3KCkgKwogIGxhYnModGl0bGUgPSAiQm94cGxvdCBkZSBpZGVudGlmaWNhw6fDo28gZGUgZXNww6ljaWVzIE5hdGl2YXMgbm9zIGNyaXTDqXJpb3MgZXN0YWJlbGVjaWRvcyIsCiAgICAgICB5ID0gIlBlcmNlbnR1YWwgZGUgaWRlbnRpZmljYcOnw6NvIiwgeCA9ICIiKSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gInRvcCIpCmBgYAoKYGBge3J9CiNib3hwbG90KHZhbHVlICB+IG11bmljaXBpbyArIGFyZWEsIGRhdGEgPSB0bXApCiMgaW50ZXJhY3Rpb24ucGxvdCh0bXAkYXJlYSwgdG1wJG11bmljaXBpbywgdG1wJHZhbHVlKQojIGludGVyYWN0aW9uLnBsb3QodG1wJG11bmljaXBpbywgdG1wJGFyZWEsIHRtcCR2YWx1ZSkKIyBhZ2dyZWdhdGUodmFsdWUgfiBhcmVhICogbXVuaWNpcGlvLCBkYXRhID0gdG1wLCBGVU4gPSBmdW5jdGlvbih4KSBzaGFwaXJvLnRlc3QoeCkkcC52YWx1ZSkKIyB0bXAkYmFydCA9IHBhc3RlKHRtcCRtdW5pY2lwaW8sICItIiwgdG1wJGFyZWEpCiMgYmFydGxldHQudGVzdCh2YWx1ZSB+IGJhcnQsIGRhdGEgPSB0bXApCgp0LmFub3ZhIDwtIGFub3ZhKGxtKHZhbHVlICB+IG11bmljaXBpbyAqIGFyZWEsIGRhdGEgPSB0bXAgJT4lIGZpbHRlcihpbmRpY2Fkb3IgPT0gImluZGljZSIpKSkKdC5hbm92YQoKdHVrZXkgPC0gVHVrZXlIU0QoYW92KGxtKHZhbHVlICB+IG11bmljaXBpbyAqIGFyZWEsIGRhdGEgPSB0bXAgJT4lIGZpbHRlcihpbmRpY2Fkb3IgPT0gImluZGljZSIpKSkpCnBsb3QodHVrZXkpCgp0ayA8LSBhcy5kYXRhLmZyYW1lKHR1a2V5JGBtdW5pY2lwaW86YXJlYWApCnRrJGNvbXBhcmFjYW8gPSByb3duYW1lcyh0aykKcm93bmFtZXModGspID0gTlVMTAp0ayAlPiUKICAgIHNlbGVjdChjb21wYXJhY2FvLCBkaWZmOmBwIGFkamApICU+JQogICAgbXV0YXRlKHNpZ25pZmljYW5jaWEgPSBgcCBhZGpgIDw9IDAuMDUpICU+JQogICAga2FibGUoKSAlPiUKICAgIGthYmxlX3N0eWxpbmcoYygic3RyaXBlZCIsICJib3JkZXJlZCIpLCBmdWxsX3dpZHRoID0gVFJVRSkgJT4lCiAgICBjb2x1bW5fc3BlYygxLCBib2xkID0gVFJVRSkKCmBgYAoKIyMjIyA4LiBGcmVxdWVuY2lhIGRlIGNvbnRhdG8gbmF0dXJlemEKCmBgYHtyLCBmaWcud2lkdGg9OCwgZmlnLmhlaWdodD0zfQp0bXAgPC0gCiAgICBwb3NfZ2FiYXJpdG8kcHJvcG9yY29lcyRwb3JfdHVybWFfZnJlcV9jb250YXRvICU+JQogICAgc2VsZWN0KGZyZXF1ZW5jaWEsIHBfbm9tZV9uYXRpdmFzID0gcF9uYXRpdmFzLCBwX29yaWdlbV9uYXRpdmFzLCBwX2luZGljZV9uYXRpdmFzKSAlPiUKICAgIGFycmFuZ2UoZnJlcXVlbmNpYSkgJT4lCiAgICBtZWx0KGlkID0gImZyZXF1ZW5jaWEiKQoKdG1wIDwtCiAgICBjYmluZCh0bXAsIGNvbHNwbGl0KHRtcCR2YXJpYWJsZSwgIl8iLCBjKCJwIiwgImluZGljYWRvciIsICJvcmlnZW0iKSkpICU+JQogICAgc2VsZWN0KGZyZXF1ZW5jaWEsIGluZGljYWRvciwgb3JpZ2VtLCB2YWx1ZSkKCnRtcCAlPiUKICBnZ3Bsb3QoKSArIAogIGdlb21fYm94cGxvdChhZXMoeCA9IGZyZXF1ZW5jaWEsIHkgPSB2YWx1ZSwgZmlsbCA9IGZyZXF1ZW5jaWEpLCBzaG93LmxlZ2VuZCA9IFQpICsgCiAgc2NhbGVfeV9jb250aW51b3VzKGxpbWl0cyA9IGMoMCwxKSwgbGFiZWxzID0gc2NhbGVzOjpwZXJjZW50KSArCiAgZmFjZXRfd3JhcCh+aW5kaWNhZG9yKSArCiAgdGhlbWVfYncoKSArCiAgbGFicyh0aXRsZSA9ICJCb3hwbG90IGRlIGlkZW50aWZpY2HDp8OjbyBkZSBlc3DDqWNpZXMgTmF0aXZhcyBub3MgY3JpdMOpcmlvcyBlc3RhYmVsZWNpZG9zIiwKICAgICAgIHkgPSAiUGVyY2VudHVhbCBkZSBpZGVudGlmaWNhw6fDo28iLCB4ID0gIiIpICsKICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDI1LCBoanVzdCA9IDEpLAogICAgICAgIGxlZ2VuZC5wb3NpdGlvbiA9ICJ0b3AiKQpgYGAKCmBgYHtyfQphZ2dyZWdhdGUodmFsdWUgfiBmcmVxdWVuY2lhLCBkYXRhID0gdG1wICU+JSBmaWx0ZXIoaW5kaWNhZG9yID09ICJpbmRpY2UiKSwgRlVOID0gZnVuY3Rpb24oeCkgc2hhcGlyby50ZXN0KHgpJHAudmFsdWUpCgp0LmFub3ZhIDwtIGFub3ZhKGxtKHZhbHVlICB+IGZyZXF1ZW5jaWEsIGRhdGEgPSB0bXAgJT4lIGZpbHRlcihpbmRpY2Fkb3IgPT0gImluZGljZSIpKSkKdC5hbm92YQoKdHVrZXkgPC0gVHVrZXlIU0QoYW92KGxtKHZhbHVlICB+IGZyZXF1ZW5jaWEsIGRhdGEgPSB0bXAgJT4lIGZpbHRlcihpbmRpY2Fkb3IgPT0gImluZGljZSIpKSkpCnR1a2V5CnBsb3QodHVrZXkpCgp0ayA8LSBhcy5kYXRhLmZyYW1lKHR1a2V5JGZyZXF1ZW5jaWEpCnRrJGNvbXBhcmFjYW8gPSByb3duYW1lcyh0aykKcm93bmFtZXModGspID0gTlVMTAp0ayAlPiUKICAgIHNlbGVjdChjb21wYXJhY2FvLCBkaWZmOmBwIGFkamApICU+JQogICAgbXV0YXRlKHNpZ25pZmljYW5jaWEgPSBgcCBhZGpgIDw9IDAuMDUpICU+JQogICAga2FibGUoKSAlPiUKICAgIGthYmxlX3N0eWxpbmcoYygic3RyaXBlZCIsICJib3JkZXJlZCIpLCBmdWxsX3dpZHRoID0gVFJVRSkgJT4lCiAgICBjb2x1bW5fc3BlYygxLCBib2xkID0gVFJVRSkKCmBgYAoKIyMjIyA5LiBGZXogYXVsYXMgcHJhdGljYXMKCmBgYHtyLCBmaWcud2lkdGg9OCwgZmlnLmhlaWdodD0zfQp0bXAgPC0gCiAgICBwb3NfZ2FiYXJpdG8kcHJvcG9yY29lcyRwb3JfdHVybWFfZmV6X2F1bGEgJT4lCiAgICBzZWxlY3QoZmV6LmF1bGEsIHBfbm9tZV9uYXRpdmFzID0gcF9uYXRpdmFzLCBwX29yaWdlbV9uYXRpdmFzLCBwX2luZGljZV9uYXRpdmFzKSAlPiUKICAgIGFycmFuZ2UoZmV6LmF1bGEpICU+JQogICAgbWVsdChpZCA9ICJmZXouYXVsYSIpCgp0bXAgPC0gY2JpbmQodG1wLCBjb2xzcGxpdCh0bXAkdmFyaWFibGUsICJfIiwgYygicCIsICJpbmRpY2Fkb3IiLCAib3JpZ2VtIikpKSAlPiUKICBzZWxlY3QoZmV6LmF1bGEsIGluZGljYWRvciwgb3JpZ2VtLCB2YWx1ZSkgCgp0bXAgJT4lCiAgZ2dwbG90KCkgKyAKICBnZW9tX2JveHBsb3QoYWVzKHggPSBmZXouYXVsYSwgeSA9IHZhbHVlLCBmaWxsID0gZmV6LmF1bGEpLCBzaG93LmxlZ2VuZCA9IFQpICsgCiAgc2NhbGVfeV9jb250aW51b3VzKGxpbWl0cyA9IGMoMCwxKSwgbGFiZWxzID0gc2NhbGVzOjpwZXJjZW50KSArCiAgZmFjZXRfd3JhcCh+aW5kaWNhZG9yKSArCiAgdGhlbWVfYncoKSArCiAgbGFicyh0aXRsZSA9ICJCb3hwbG90IGRlIGlkZW50aWZpY2HDp8OjbyBkZSBlc3DDqWNpZXMgTmF0aXZhcyBub3MgY3JpdMOpcmlvcyBlc3RhYmVsZWNpZG9zIC0gQWx1bm9zIHF1ZSBmaXplcmFtIGF1bGEiLAogICAgICAgeSA9ICJQZXJjZW50dWFsIGRlIGlkZW50aWZpY2HDp8OjbyIsIHggPSAiIikgKwogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gMjUsIGhqdXN0ID0gMSksIAogICAgICAgIGxlZ2VuZC5wb3NpdGlvbiA9ICJ0b3AiKQpgYGAKCmBgYHtyfQoKdGVzdGUuYW5vdmEgPC0gZnVuY3Rpb24oZm9ybXVsYSwgZGF0YSkgewogICAgdC5ub3JtYWxpZGFkZSA8LSAKICAgICAgICBhZ2dyZWdhdGUoZm9ybXVsYSwgZGF0YSwgCiAgICAgICAgICAgICAgICAgIEZVTiA9IGZ1bmN0aW9uKHgpIHNoYXBpcm8udGVzdCh4KSRwLnZhbHVlKSAlPiUKICAgICAgICBtdXRhdGUoSDAgPSAodmFsdWUgPD0gMC4wNSksCiAgICAgICAgICAgICAgIG5vcm1hbGlkYWRlID0gY2VsbF9zcGVjKEgwLCBib2xkID0gSDAsCiAgICAgICAgICAgICAgICAgICBjb2xvcj0gaWZlbHNlKEgwLCAid2hpdGUiLCAiYmxhY2siKSwgCiAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kID0gaWZlbHNlKEgwLCAiZ3JlZW4iLCAiI0NDQ0NDQyIpKQogICAgICAgICAgICAgICApICU+JQogICAgICAgIGthYmxlKGVzY2FwZSA9IEYpICU+JQogICAgICAgIGthYmxlX3N0eWxpbmcoYygic3RyaXBlZCIsICJib3JkZXJlZCIpLCBmdWxsX3dpZHRoID0gVFJVRSkgJT4lCiAgICAgICAgY29sdW1uX3NwZWMoMSwgYm9sZCA9IFRSVUUpCgogICAgdC5hbm92YSA8LSBhbm92YShsbShmb3JtdWxhLCBkYXRhKSkKICAgIHQudHVrZXkgPC0gVHVrZXlIU0QoYW92KGxtKGZvcm11bGEsIGRhdGEpKSkKCiAgICBpZihsZW5ndGgodC50dWtleSkgPiAxKSB7CiAgICAgICAgZXJyb3IoIkFOT1ZBIGZhdG9yaWFsIChmYWx0YSB0cmF0YXIgaXNzbykhIikKICAgIH0KICAgIHR1a2V5LnRibCA8LSBhcy5kYXRhLmZyYW1lKHQudHVrZXlbWzFdXSwgY3V0Lm5hbWVzID0gRikKICAgIHR1a2V5LnRibCRjb21wYXJhY2FvID0gcm93bmFtZXModHVrZXkudGJsKQogICAgcm93bmFtZXModHVrZXkudGJsKSA9IE5VTEwKICAgIHRhYmVsYS50dWtleSA8LSB0dWtleS50YmwgJT4lCiAgICAgICAgbXV0YXRlKEgwID0gKGBwIGFkamAgPD0gMC4wNSksCiAgICAgICAgICAgICAgIHNpZ25pZmljYW5jaWEgPSBjZWxsX3NwZWMoSDAsIGJvbGQgPSBIMCwKICAgICAgICAgICAgICAgICAgIGNvbG9yPSBpZmVsc2UoSDAsICJ3aGl0ZSIsICJibGFjayIpLCAKICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQgPSBpZmVsc2UoSDAsICJncmVlbiIsICIjQ0NDQ0NDIikpCiAgICAgICAgICAgICAgICkgJT4lCiAgICAgICAgc2VsZWN0KGNvbXBhcmFjYW8sIGRpZmY6YHAgYWRqYCwgc2lnbmlmaWNhbmNpYSkgJT4lCiAgICAgICAga2FibGUoZXNjYXBlID0gRikgJT4lCiAgICAgICAga2FibGVfc3R5bGluZyhjKCJzdHJpcGVkIiwgImJvcmRlcmVkIiksIGZ1bGxfd2lkdGggPSBUUlVFKSAlPiUKICAgICAgICBjb2x1bW5fc3BlYygxLCBib2xkID0gVFJVRSkKICAgIAogICAgICAgIAogICAgcmVzdWx0YWRvIDwtIAogICAgICAgIGxpc3QoCiAgICAgICAgICAgIHRlc3RlLm5vcm1hbGlkYWRlID0gdC5ub3JtYWxpZGFkZSwKICAgICAgICAgICAgdGVzdGUuYW5vdmEgPSB0LmFub3ZhLAogICAgICAgICAgICB0dWtleSA9IHQudHVrZXksCiAgICAgICAgICAgIHRhYmVsYS50dWtleSA9IHRhYmVsYS50dWtleQogICAgICAgICkKICAgIHJldHVybihyZXN1bHRhZG8pCn0KCmFub3ZhX2Zlei5hdWxhIDwtIHRlc3RlLmFub3ZhKGZvcm11bGEgPSB2YWx1ZSB+IGZlei5hdWxhLCAKICAgICAgICAgICAgZGF0YSA9IHRtcCAlPiUgZmlsdGVyKGluZGljYWRvciA9PSAiaW5kaWNlIikpCgphbm92YV9mZXouYXVsYSR0ZXN0ZS5ub3JtYWxpZGFkZQphbm92YV9mZXouYXVsYSR0ZXN0ZS5hbm92YQphbm92YV9mZXouYXVsYSR0YWJlbGEudHVrZXkKCmBgYAoKCgojIyMjIDEwLiBFc3R1ZGFudGVzIGRhIENpZGFkZSAxIChjb20gVUMpIHRlbSBtYWlvciBuw7ptZXJvIGRlIGFjZXJ0b3MgZGUgZXNww6ljaWVzIG5hdGl2YXMuCgpgYGB7ciwgZmlnLndpZHRoPTgsIGZpZy5oZWlnaHQ9M30KdG1wIDwtIAogICAgcG9zX2dhYmFyaXRvJHByb3BvcmNvZXMkcG9yX3R1cm1hX2Zsb25hICU+JQogICAgc2VsZWN0KGZsb25hLCBwX25vbWVfbmF0aXZhcyA9IHBfbmF0aXZhcywgcF9vcmlnZW1fbmF0aXZhcywgcF9pbmRpY2VfbmF0aXZhcykgJT4lCiAgICBhcnJhbmdlKGZsb25hKSAlPiUKICAgIG1lbHQoaWQgPSAiZmxvbmEiKQoKdG1wIDwtIGNiaW5kKHRtcCwgY29sc3BsaXQodG1wJHZhcmlhYmxlLCAiXyIsIGMoInAiLCAiaW5kaWNhZG9yIiwgIm9yaWdlbSIpKSkgJT4lCiAgc2VsZWN0KGZsb25hLCBpbmRpY2Fkb3IsIG9yaWdlbSwgdmFsdWUpIAoKdG1wICU+JQogIGdncGxvdCgpICsgCiAgZ2VvbV9ib3hwbG90KGFlcyh4ID0gZmxvbmEsIHkgPSB2YWx1ZSwgZmlsbCA9IGZsb25hKSwgc2hvdy5sZWdlbmQgPSBUKSArIAogIHNjYWxlX3lfY29udGludW91cyhsaW1pdHMgPSBjKDAsMSksIGxhYmVscyA9IHNjYWxlczo6cGVyY2VudCkgKwogIGZhY2V0X3dyYXAofmluZGljYWRvcikgKwogIHRoZW1lX2J3KCkgKwogIGxhYnModGl0bGUgPSAiQm94cGxvdCBkZSBpZGVudGlmaWNhw6fDo28gZGUgZXNww6ljaWVzIE5hdGl2YXMgbm9zIGNyaXTDqXJpb3MgZXN0YWJlbGVjaWRvcyAtIEFsdW5vcyBxdWUgdmlzaXRhcmFtIGEgRmxvbmEiLAogICAgICAgeSA9ICJQZXJjZW50dWFsIGRlIGlkZW50aWZpY2HDp8OjbyIsIHggPSAiIikgKwogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gMjUsIGhqdXN0ID0gMSksIAogICAgICAgIGxlZ2VuZC5wb3NpdGlvbiA9ICJ0b3AiKQpgYGAKCmBgYHtyfQojIHQuYW5vdmEgPC0gYW92KGRhdGEgPSB0bXAsIGZvcm11bGEgPSB2YWx1ZSB+IGZsb25hKQojIHQuYW5vdmEKIyBzdW1tYXJ5KHQuYW5vdmEpCiMgCiMgdHVrZXkgPC0gVHVrZXlIU0QodC5hbm92YSkKIyB0dWtleQoKYW5vdmFfZmxvbmEgPC0gdGVzdGUuYW5vdmEoZm9ybXVsYSA9IHZhbHVlIH4gZmxvbmEsIAogICAgICAgICAgICBkYXRhID0gdG1wICU+JSBmaWx0ZXIoaW5kaWNhZG9yID09ICJpbmRpY2UiKSkKCmFub3ZhX2Zsb25hJHRlc3RlLm5vcm1hbGlkYWRlCmFub3ZhX2Zsb25hJHRlc3RlLmFub3ZhCmFub3ZhX2Zsb25hJHRhYmVsYS50dWtleQoKYGBgCgojIyMjIFJhbmtpbmcgZG9zIGFuaW1haXMKCmBgYHtyLCBmaWcud2lkdGg9OCwgZmlnLmhlaWdodD00fQphMSA8LSAKICAgIHBvc19nYWJhcml0byRyYWtpbmdfYW5pbWFpcyRuYXRpdm9zICU+JQogICAgaGVhZCgyMCkgJT4lCiAgICBnZ3Bsb3QoYWVzKHggPSBhbmltYWlzLCB5ID0gZnJlcSwgZmlsbCA9IGZyZXEpKSArCiAgICBnZW9tX2JhcihzdGF0PSJpZGVudGl0eSIsIHNob3cubGVnZW5kID0gRikgKwogICAgZ2VvbV90ZXh0KGFlcyhsYWJlbCA9IGZyZXEpLCBwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKDAuOSksIHZqdXN0ID0gLTEsIGhqdXN0ID0gMC41KSArCiAgICBzY2FsZV95X2NvbnRpbnVvdXMobGltaXRzID0gYygwLDkwKSkgKwogICAgc2NhbGVfZmlsbF9ncmFkaWVudChsb3cgPSAib3JhbmdlIiwgaGlnaCA9ICJyZWQiKSArCiAgICB0aGVtZV9idygpICsKICAgIGxhYnModGl0bGUgPSAiRXNww6ljaWVzIGNpdGFkYXMgY29tbyBuYXRpdmFzIiwKICAgICAgIHkgPSAiRnJlcXVlbmNpYSIsIHggPSAiIikgKwogICAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSAyNSwgaGp1c3QgPSAxKSkKYTIgPC0gCiAgICBwb3NfZ2FiYXJpdG8kcmFraW5nX2FuaW1haXMkZXhvdGljb3MgJT4lCiAgICBoZWFkKDIwKSAlPiUKICAgIGdncGxvdChhZXMoeCA9IGFuaW1haXMsIHkgPSBmcmVxLCBmaWxsID0gZnJlcSkpICsKICAgIGdlb21fYmFyKHN0YXQ9ImlkZW50aXR5Iiwgc2hvdy5sZWdlbmQgPSBGKSArCiAgICBnZW9tX3RleHQoYWVzKGxhYmVsID0gZnJlcSksIHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2UoMC45KSwgdmp1c3QgPSAtMSwgaGp1c3QgPSAwLjUpICsKICAgIHNjYWxlX3lfY29udGludW91cyhsaW1pdHMgPSBjKDAsOTApKSArCiAgICBzY2FsZV9maWxsX2dyYWRpZW50KGxvdyA9ICJsaWdodGJsdWUiLCBoaWdoID0gImRhcmtibHVlIikgKwogICAgdGhlbWVfYncoKSArCiAgICBsYWJzKHRpdGxlID0gIkVzcMOpY2llcyBjaXRhZGFzIGNvbW8gZXjDs3RpY2FzIiwKICAgICAgIHkgPSAiRnJlcXVlbmNpYSIsIHggPSAiIikgKwogICAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSAyNSwgaGp1c3QgPSAxKSkKZ3JpZC5hcnJhbmdlKGExLCBhMiwKICAgICAgICAgICAgIG5yb3cgPSAyLAogICAgICAgICAgICAgdG9wID0gdGV4dEdyb2IoIlRPUCAyMCAtIFJhbmtpbmcgZGFzIGVzcMOpY2llcyBjaXRhZGFzIGNvbW8gZXhlbXBsb1xuIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBncCA9IGdwYXIoZm9udHNpemUgPSAyMCwgZm9udCA9IDIpKQopCmBgYAoK